package lv.servidordisqueria.server.accion;

import java.util.ArrayList;
import java.util.Collection;

import lv.mensajeriadisqueria.dto.InstrumentoDto;
import lv.mensajeriadisqueria.idomain.IInstrumento;
import lv.mensajeriadisqueria.mensaje.Mensaje;
import lv.servidordisqueria.domain.Instrumento;
import lv.servidordisqueria.repositorio.Repositorio;

public class InstrumentoAccion implements Accion<IInstrumento> {

	private Repositorio<IInstrumento> repositorio;
	
	public InstrumentoAccion(){
		repositorio = new Repositorio<IInstrumento>();
	}
	
	@Override
	public Mensaje actuar(Mensaje mensaje) {
		Mensaje respuesta = new Mensaje();
		IInstrumento instrumentoDto = (IInstrumento)mensaje.getObjeto();
		if (Mensaje.ALTA.equalsIgnoreCase(mensaje.getMensaje())) {
			insertar(respuesta, instrumentoDto);
		} else if (Mensaje.BAJA.equalsIgnoreCase(mensaje.getMensaje())) {
			borrar(respuesta, instrumentoDto);
		} else if (Mensaje.MODIFICAR.equalsIgnoreCase(mensaje.getMensaje())) {
			modificar(respuesta, instrumentoDto);
		} else if (Mensaje.TODOS.equalsIgnoreCase(mensaje.getMensaje())) {
			buscarTodos(respuesta);
		}
		return respuesta;
	}

	@Override
	public void borrar(Mensaje respuesta, IInstrumento instrumentoDto) {
		try {
			respuesta.setMensaje(Mensaje.BORRADO);
			IInstrumento instrumento = repositorio.buscarPorId(Instrumento.class, instrumentoDto.getIdInstrumento());
			repositorio.borradoFisico(instrumento);
		} catch (RuntimeException e) {
			respuesta.setMensaje(Mensaje.EXCEPTION);
			respuesta.setObjeto(e);
		}
	}

	@Override
	public void buscarTodos(Mensaje respuesta) {
		try {
			System.out.println("entro a buscas todos los Instrumentos");
			Collection<IInstrumento> todosInstrumentos = repositorio.buscarTodos(Instrumento.class);
			Collection<IInstrumento> instrumentos = new ArrayList<IInstrumento>();
			for (IInstrumento instrumento : todosInstrumentos) {
				instrumentos.add(tranformarDomainToDto(instrumento));
			}
			respuesta.setMensaje(Mensaje.ENVIO_TODOS);
			respuesta.setObjeto(instrumentos);
			System.out.println("encontro todos los instrumentos");
		} catch (RuntimeException e) {
			respuesta.setMensaje(Mensaje.EXCEPTION);
			respuesta.setObjeto(e);
		}
	}

	@Override
	public void insertar(Mensaje respuesta, IInstrumento instrumentoDto) {
		try {
			respuesta.setMensaje(Mensaje.INSERTADO);
			IInstrumento instrumento = tranformarDtoToDomain(instrumentoDto);
			repositorio.insertar(instrumento);
			instrumentoDto.setIdInstrumento(instrumento.getIdInstrumento());
			respuesta.setObjeto(instrumentoDto);
		} catch (RuntimeException e) {
			respuesta.setMensaje(Mensaje.EXCEPTION);
			respuesta.setObjeto(e);
		}
	}

	@Override
	public void modificar(Mensaje respuesta, IInstrumento instrumentoDto) {
		try {
			System.out.println("entro al Modificar");
			IInstrumento instrumento = repositorio.buscarPorId(Instrumento.class, instrumentoDto.getIdInstrumento());
			instrumento.setDescripcion(instrumentoDto.getDescripcion());
			repositorio.editar(instrumento);
			respuesta.setMensaje(Mensaje.MODIFICADO);
			System.out.println(Mensaje.MODIFICADO);
		} catch (RuntimeException e) {
			respuesta.setMensaje(Mensaje.EXCEPTION);
			respuesta.setObjeto(e);
		}
	}

	@Override
	public IInstrumento tranformarDomainToDto(IInstrumento instrumento) {
		InstrumentoDto instrumentoDto = new InstrumentoDto(instrumento.getDescripcion());
		instrumentoDto.setIdInstrumento(instrumento.getIdInstrumento());
		instrumentoDto.setHabilitado(instrumento.getHabilitado());
		return instrumentoDto;
	}

	@Override
	public IInstrumento tranformarDtoToDomain(IInstrumento instrumentoDto) {
		Instrumento instrumento = new Instrumento(instrumentoDto.getDescripcion());
		return instrumento;
	}

}
